函式與變數的作用範圍
變數作用範圍分成全域變數與函式內的區域變數,宣告在最上面最外層的稱作全域變數,宣告在函式內的變數稱作區域變數,函式內若沒有那個變數就會往函式外找尋,舉例如以下範例:
#input
g = 10
def f1():
print(g)
f1()
#output
10
若函式內有一個區域變數,與全域變數名稱一樣的變數,若讀取區域變數在初始化區域變數之前,則會產生UnboundLocalError錯誤,下表中程式第3行。因為會產生UnboundLocalError錯誤,所以使用井字號「#」進行註解讓該行沒有作用,若要測試此錯誤就可以將井字號「#」刪除,再執行程式一次,就會出現UnboundLocalError錯誤。
從以下程式可以發現,全域變數g與區域變數g,是兩個不同的變數,函式內區域變數g作用範圍在函式內,全域變數g作用範圍為整個檔案,但因為函式內區域變數有相同的變數名稱,函式會優先使用區域變數,若找不到才去找全域變數。
#input
g = 10
def f1():
#print(g)
g = 20
print(g)
f1()
print(g)
#output
20
10
函式內若沒有那個變數就會往函式外去尋找,也可以使用global宣告區域變數,該區域變數將明確指向全域變數,也就是宣告為global的區域變數一定指向相同名稱的全域變數,如下:
#input
g = 10
def f1():
global g
print(g)
g = 20
print(g)
f1()
print(g)
#output
10
20
20
明天會給一些題目做練習喔!!